// Promise.all([])：接收一个Promise对象的数组，返回一个Promise对象。
// 当数组中的Promise全部reslove之后，该返回的Promise对象变为reslove状态。成功值：所有Promise成功结果的数组。
// 如果数组中的Promise对象有一个变为reject状态，该Promise变为reject状态。失败值：第一个失败的Promise的reject内容。

// 它不保证数组中的Promise能顺向执行完毕。如果返回的对象变为失败状态，可能与数组中的所有Promise状态不一致。

function buy(name,food) {
    const random = Math.random();

    const time = Math.random() * 1000 + 3000;

    console.log(`${name}准备买${food}`);

    return new Promise((resolve,reject) => {
        setTimeout(()=> {
            // 成功和失败随机
            if (random <= 0.9) {
                console.log(`${name}成功买到${food}`);
                resolve(food);
            } else {
                console.log(`${name}买${food}失败了`);
                reject(food);
            } 
        },time);
    });
}

function start() {
    let foods = ["牛肉","猪肉","鱼肉","鸡肉"];
    let stus = ["陈科地","聂仔欣","宋庭一","武洪伟"];
    let promises = [];

    // 循环创建promise对象，放到Promise数组中
    for (let i in foods) {
        promises.push(buy(stus[i],foods[i]));
    }

    Promise.all(promises).then(res => {
        console.log("成功结果",res);
    },err => {
        console.log("失败结果",err);
    })

}

start();